package com.example.vinylrecordplayer.view

import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.MotionEvent
import android.view.View
import android.widget.LinearLayout
import com.example.vinylrecordplayer.R
import com.example.vinylrecordplayer.utils.DisplayUtils
import com.example.vinylrecordplayer.utils.DisplayUtils.dip2px
import kotlinx.android.synthetic.main.play_music_rotate.view.*
import kotlin.math.abs


/**
 * des 自定义音乐悬浮按钮
 * @date 2020/6/28
 * @author njb
 */
class FloatPlayLayout : LinearLayout {
    /**
     * content应该展示的宽度
     */
    private val contentWidth = dip2px(context, 180f)

    constructor(context: Context) : super(context) {
        initView(context)
    }

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
        initView(context)
    }

    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
        initView(context)
    }

    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
        when (ev.action) {
            MotionEvent.ACTION_DOWN -> {
                moveY = ev.y
            }
            MotionEvent.ACTION_MOVE -> {
                //兼容某些机型一碰就触发滑动
                if (abs(ev.y - moveY) > 100) {
                    return true
                }
            }
        }
        return false
    }

    private var moveY = 0f
    override fun onTouchEvent(event: MotionEvent): Boolean {
        when (event.action) {
            MotionEvent.ACTION_MOVE -> {
                var offsetY = translationY + (event.y - moveY)
                //因为translationY不管处于ViewGroup什么位置，初始值都为0，所以要买个top
                //最小值
                if (offsetY < -top + dip2px(context, 100f)) {
                    offsetY = -top.toFloat() + dip2px(context, 100f)
                }
                //最大值
                if (offsetY > DisplayUtils.getScreenHeight(context) - top - dip2px(context, 150f)) {
                    offsetY = DisplayUtils.getScreenHeight(context) - top.toFloat() - dip2px(
                        context,
                        150f
                    )
                }
                translationY = offsetY
                return true
            }
        }
        return super.onInterceptTouchEvent(event)
    }

    private fun initView(context: Context) {
        View.inflate(context, R.layout.play_music_rotate, this)
        //居中显示
        gravity = Gravity.CENTER
        //设置阴影
        click()
    }

    /**
     * 事件
     */
    private fun click() {

    }

    /**
     * 悬浮窗点击事件
     */
    fun rootClick(onClick: (View) -> Unit) {
        anchorLiveMusic.clickNoRepeat {
            onClick.invoke(it)
        }
    }
}

/**
 * 防止重复点击
 * @param interval 重复间隔
 * @param onClick  事件响应
 */
var lastTime = 0L
fun View.clickNoRepeat(interval: Long = 400, onClick: (View) -> Unit) {
    setOnClickListener {
        val currentTime = System.currentTimeMillis()
        if (lastTime != 0L && (currentTime - lastTime < interval)) {
            return@setOnClickListener
        }
        lastTime = currentTime
        onClick(it)
    }
}